#include <bits/stdc++.h>
using namespace std;
const int N=4050;
const int M=80050;
const int INF=0x3f3f3f3f;
struct Edge{
    int v,w,next;
    bool isIn;
}edge[M];
int cnt;
int head[N];
void init(){
    cnt=0;
    memset(head,-1,sizeof(head));
}
void addEdge(int u,int v,int w,char ch){
    bool isIn;
    if(ch=='I'){
        isIn=true;
    }
    else{
        isIn=false;
    }
    edge[cnt]=Edge{v,w,head[u],isIn};
    head[u]=cnt++;
    edge[cnt]=Edge{u,w,head[v],isIn};
    head[v]=cnt++;
}
int n,m,p;
int u,v,w;
int s,t;
char isIn[2];
int out[N],sum[N];
bool vis[N];
struct node{
    int v,o,s;
    bool operator <(const node &r)const{
        //先优先out小的
        if(o!=r.o){
            return o>r.o;
        }
        return s>r.s;
    }
};
void Dijkstra(int s){
    for(int i=0;i<n;i++){
        vis[i]=false;
        out[i]=INF;
        sum[i]=INF;
    }
    out[s]=0;
    sum[s]=0;
    priority_queue<node> q;
    q.push(node{s,0,0});
    node tmp;
    while(!q.empty()){
        tmp=q.top();
        q.pop();
        int u=tmp.v;
        if(vis[u]){
            continue;
        }
        vis[u]=true;
        for(int i=head[u];i!=-1;i=edge[i].next){
            int v=edge[i].v;
            int w=edge[i].w;
            bool flag=edge[i].isIn;
            //In的道路
            if(flag){
                if(out[v]>out[u]){
                    out[v]=out[u];
                    sum[v]=sum[u]+w;
                }
                else if(out[v]==out[u] && sum[v]>sum[u]+w){
                    sum[v]=sum[u]+w;
                }
            }
            else{
                if(out[v]>out[u]+w){
                    out[v]=out[u]+w;
                    sum[v]=sum[u]+w;
                }
                else if(out[v]==out[u]+w && sum[v]>sum[u]+w){
                    sum[v]=sum[u]+w;
                }
            }
            q.push(node{v,out[v],sum[v]});
        }
    }
}
int main(void){
    scanf("%d%d%d",&n,&m,&p);
    init();
    for(int i=0;i<m;i++){
        scanf("%d%d%d%s",&u,&v,&w,isIn);
        addEdge(u,v,w,isIn[0]);
    }
    while(p--){
        scanf("%d%d",&s,&t);
        memset(out,0,sizeof(out));
        memset(sum,0,sizeof(sum));
        Dijkstra(s);
        printf("%d %d\n",out[t],sum[t]);
    }
    return 0;
}